﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows;
using produccion.Conexion;
using Oracle.DataAccess.Client;
using System.Data;
using System.Windows.Input;
using produccion.AccesoDatos;
using produccion.modelo;


namespace produccion.vistamodelo
{
    public class VMprocesoProduccion:ObservableObject
    {
        public VMprocesoProduccion() 
        {
            consultarPP();

            if (MDOgeneral.conexion == null || MDOgeneral.conexion.State == ConnectionState.Closed)
            {
                MDOgeneral.conectar();
            }
            strTituloVentana = "Procesos de producción - Usuario: " + MDOgeneral.usuario + " - [FRMprocesoProduccion]";
        }

        private MprocesoProduccion _modelo = new MprocesoProduccion();

        public MprocesoProduccion modelo 
        {
            get { return _modelo; }
            set { _modelo = value; RaisePropertyChangedEvent("modelo");  }
        }
                
        #region comandos

        RelayCommand _cmdNuevo;
        public ICommand cmdNuevo
        {
            get
            {
                if (_cmdNuevo == null)
                {
                    _cmdNuevo = new RelayCommand(
                        param => this.Nuevo()
                        );
                }
                return _cmdNuevo;
            }
        }


        RelayCommand _cmdGuardar;
        public ICommand cmdGuardar
        {
            get
            {
                if (_cmdGuardar == null)
                {
                    _cmdGuardar = new RelayCommand(
                        param => this.Guardar()
                        );
                }
                return _cmdGuardar;
            }
        }

        #endregion

        #region propiedades

        private string _strTituloVentana;
        public string strTituloVentana
        {
            get { return _strTituloVentana; }
            set { _strTituloVentana = value; RaisePropertyChangedEvent("strTituloVentana"); }
        }

        public string strCodigo {
            get { return _modelo.strCodigo; }
            set 
            { 
                _modelo.strCodigo = value;
                modelo.msn.texto = "";
                if (!String.IsNullOrEmpty(_modelo.strCodigo)) 
                {
                    consultarProceso();
                }
                RaisePropertyChangedEvent("strCodigo");
            }

        }

        public int numSelPP 
        {
            get { return modelo.numSelPP; }
            set
            {
                modelo.numSelPP=value;
                modelo.msn.texto = "";
                if (modelo.numSelPP != -1) 
                {            
                    strCodigo = modelo.dtPP.Rows[modelo.numSelPP]["CODIGO"].ToString();
                   // consultarPPE();
                }
                RaisePropertyChangedEvent("numSelPP");
            }        
        }
        #endregion
        
        ProcesoProduccionRepositorio _rep = new ProcesoProduccionRepositorio();

        //Consulta todos los procesos de produccion
        public void consultarPP()
        {
            try
            {
                modelo.dtPP = _rep.consultarPP();
            }
            catch (Exception ex) { MessageBox.Show(ex.Message); }
        }

        //Consulta los procesos de produccion excluidos y no excluidos para un proceso
        public void consultarPPE()
        {
            try
            {
                _rep.consultarPPE(modelo);
            }
            catch (Exception ex) { MessageBox.Show(ex.Message); }
        }

        //Consulta un proceso de produccion especifico
        public void consultarProceso() 
        {
            try 
            {
               DataSet ds= _rep.consultarProceso(modelo);
               modelo.obsProcesosE.Clear();

               DataTable val2 = ds.Tables[0];
               foreach (DataRow r in val2.Rows)
               {
                   modelo.obsProcesosE.Add(new MprocesoProduccion.procesoExcluido
                   {
                       strCodigo = r["CODIGO"].ToString(),
                       strNombre = r["NOMBRE"].ToString(),
                       strExcluido = r["EXCLUIDO"].ToString()
                   });
               }

               modelo.strNombre = "";
               modelo.strEstado = "A";
               modelo.strAsignado = "S";
               modelo.numValor = 0;

               DataTable val3 = ds.Tables[1];
               foreach (DataRow r in val3.Rows)
               {
                  
                   modelo.strNombre = r["NOMBRE"].ToString();
                   modelo.strEstado = r["ESTADO"].ToString();
                   modelo.strAsignado = r["PREASIGNADO"].ToString();
                   modelo.strAceptaDevolucion = r["DEVOLUCION"].ToString();
                   modelo.numValor = Convert.ToDouble(r["VALOR"]);
               }

            }
            catch (Exception ex) { MessageBox.Show(ex.Message); }
        }

        //Nuevo
        public void Nuevo() {
            try {
                strCodigo = "";
                modelo.strNombre = "";
                modelo.strEstado = "A";
                modelo.strAsignado = "S";
                modelo.numValor = 0;
                modelo.obsProcesosE.Clear();
               
            }
            catch (Exception ex) { MessageBox.Show(ex.Message); }
        }
        

        //Guardar
        public void Guardar() {
            try {

                if (_rep.guardar(modelo))
                {
                    modelo.msn.texto = "El proceso de produccion fue guardado.";
                    modelo.msn.tipo = true;
                    consultarPP();

                }
                else {
                    modelo.msn.texto = "El proceso de produccion no puede ser guardado.";
                    modelo.msn.tipo = false;
                
                }
               
            }
            catch (Exception ex) { MessageBox.Show(ex.Message); }
        
        }

    }
}
